package com.mmall.concurrency.example.singleton;

import com.mmall.concurrency.annotions.NotThreadSafes;

/**
 * 懒汉模式 -》 双重同步锁单例模式
 * 单例实例在第一次使用时进行创建
 *
 * @author Diamon.Cheng
 * @date 2019/12/5.
 */

@NotThreadSafes
public class SingletonExample_4 {

    private  SingletonExample_4(){}
    
    // 单例对象
    public static  SingletonExample_4 instance = null;
    
    
    // JVM和cpu优化，发生了指令重排
    
    // 静态的工厂方法
    public  static  SingletonExample_4 getInstance(){
        if (instance == null){
            synchronized (SingletonExample_4.class){
                if (instance == null){
                    instance = new SingletonExample_4();
                }
            }
        }
        return  instance;
    }
}
